package com.yami.shop.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yami.shop.bean.dto.ProdInventoryDTO;
import com.yami.shop.bean.model.ProdInventory;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商品详细库存Mapper
 */
@Mapper
public interface ProdInventoryMapper extends BaseMapper<ProdInventory> {
    /**
     * 分页查询商品详细库存列表
     * @param page 分页参数
     * @param prodId 商品ID
     * @param shopId 店铺ID
     * @param categoryId 分类ID
     * @param status 状态
     * @return 分页结果
     */
    IPage<ProdInventoryDTO> pageProdInventory(Page<ProdInventoryDTO> page, 
                                             @Param("prodId") Long prodId, 
                                             @Param("shopId") Long shopId,
                                             @Param("categoryId") Long categoryId,
                                             @Param("status") Integer status);
                                             
    /**
     * 获取商品详细库存详情
     * @param id 库存ID
     * @return 商品详细库存详情
     */
    ProdInventoryDTO getProdInventoryById(@Param("id") Long id);
    
    /**
     * 批量获取商品详细库存
     * @param prodId 商品ID
     * @param status 状态
     * @param limit 限制数量
     * @return 商品详细库存列表
     */
    List<ProdInventory> listProdInventoryByProdIdAndStatus(@Param("prodId") Long prodId, 
                                                          @Param("status") Integer status,
                                                          @Param("limit") Integer limit);
    
    /**
     * 更新商品详细库存状态
     * @param id 库存ID
     * @param status 状态
     * @return 影响行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
    
    /**
     * 统计商品不同状态的库存数量
     * @param prodId 商品ID
     * @param status 状态
     * @return 库存数量
     */
    int countByProdIdAndStatus(@Param("prodId") Long prodId, @Param("status") Integer status);
} 